# 人工智能1906A裴云鹏
# 2021年1月25日 星期一 上午8:42
# 第三周周考 技能
# 第二大题

def sep(label=''):
    '''
    Utility function to print a separator line.
    :param label: The optional label.
    :return: None
    '''
    print('-' * 16, label, '-' * 16, sep='')


# 1.	设计一个手机类，类名：Ｍobile
class Mobile(object):

    # 2.	设置一个类属性,产地place,值为“China”
    place = 'China'

    def __init__(self, factory, brand, color, mn=100):
        self.factory = factory
        self.brand = brand
        self.color = color
        self.__mn = mn

    def __del__(self):
        print(f'__del__: 我正在销毁{self.color}的{self.factory} {self.brand} 手机！')

    # 3.	写一个实例方法set_info，通过传参方式，为3个实例属性赋值
    # 3个实例属性如下：厂商factory，品牌brand, 颜色color，通话时长mn（此属性有默认值，为100）；
    def set_info(self, factory, brand, color, mn=100):
        self.factory = factory
        self.brand = brand
        self.color = color
        self.__mn = mn

    # 4.	构建一个实例方法setColor()，用来修改属性Color的值,通过传参方式,为对象修改颜色。
    def setColor(self, color):
        self.color = color

    # 5.	构建一个实例方法，getＭn()，返回对象的通话时长
    def getMn(self):
        return self.__mn

    # 6.	写一个实例方法curState（）,调用时，输出：
    # 我正在用xx（颜色）的xx (厂商) xx(品牌) 手机与你通话！
    def curSate(self):
        print(f'我正在用{self.color}的{self.factory} {self.brand} 手机与你通话！')

    def __str__(self):
        return f'__str__: 我正在用{self.color}的{self.factory} {self.brand} 手机与你通话！'

    def __repr__(self):
        return f'__repr__: 我正在用{self.color}的{self.factory} {self.brand} 手机与你通话！'

    # 7.	写一个实例方法calling，要求如下：
    # 本方法每调用1次时长减少5，同时打印输出“目前还有通话时长xx分钟！”（xx 为实际还剩下的通话时长）
    def calling(self):
        if self.__mn < 5:
            print('通话时长不足5')
            return
        self.__mn -= 5
        self.curSate()
        print(f'目前还有通话时长{self.__mn}分钟！')


# 8.	创建一个手机对象mb，
# 厂商factory:华为;    品牌brand：mate10;    颜色color: 红色
mb = Mobile('华为', 'mate10', '红色')
# mb.set_info('华为', 'mate10', '红色')

# 9.	用mb调用setColor方法将颜色修改成黑色，再调用方法curState（）
mb.setColor('黑色')
print(mb)
print(str(mb))
print(repr(mb))
print(f'{mb!s} {mb!r}')

# 10.	用对象名mb调用call方法4次。
for i in range(4):
    mb.calling()

print(mb._Mobile__mn)

vivo = Mobile('vivo', 'X-35', 'pink')
sep('EOF')